package gcp.testes;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import gcp.Pessoa;
import gcp.enums.Sexo;

import org.junit.Test;

/**
 * Classe de teste de Pessoa.
 * @author catharine
 */
public class PessoaTeste {

	/**
	 * Testa construtor de Pessoa
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test
	public void testaPessoa() throws Exception {
		new Pessoa("Hildegard", "Furtado", Sexo.FEMININO);
		new Pessoa("Girafa", "Amarela", Sexo.MASCULINO);
	}
	
	 /**
	 * Testa excecao de parametro nome null
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test(expected = Exception.class)
	public void testaNomeNulo() throws Exception {
		new Pessoa(null, "Furtado", Sexo.FEMININO);
		new Pessoa(null, "Amarela", Sexo.MASCULINO);
	}

	 /**
	 * Testa excecao de parametro nome vazio
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test(expected = Exception.class)
	public void testaNomeVazio() throws Exception {
		new Pessoa("", "Furtado", Sexo.FEMININO);
		new Pessoa("", "Amarela", Sexo.MASCULINO);
	}

	 /**
	 * Testa excecao de parametro sobrenome null
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test(expected = Exception.class)
	public void testaSobreNomeNulo() throws Exception {
		new Pessoa("Hildegard", null, Sexo.FEMININO);
		new Pessoa("Catharine", null, Sexo.FEMININO);

	}

	 /**
	 * Testa excecao de parametro sobrenome null
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test(expected = Exception.class)
	public void testaSobrenomeVazio() throws Exception {
		new Pessoa("Hildegard", "", Sexo.FEMININO);
		new Pessoa("Girafa", "", Sexo.MASCULINO);
	}

	
	 /**
	 * Testa equals de pessoa
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test
	public void testaPessoaEquals() throws Exception {
		Pessoa gigi = new Pessoa("Girafa", "Melman", Sexo.FEMININO);
		Pessoa girafinha = new Pessoa("Girafa", "Melman", Sexo.FEMININO);
		Pessoa juju = new Pessoa("Lobo", "Mau", Sexo.SELECIONAR);
		assertTrue(gigi.equals(girafinha));
		assertFalse(gigi.equals(juju));
	}

	 /**
	 * Testa set e get de pessoa
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test
	public void testaSetEGet() throws Exception {
		Pessoa p1 = new Pessoa("Girafa", "Melman", Sexo.FEMININO);
		Pessoa p2 = new Pessoa("girafa", "Malandrinha", Sexo.SELECIONAR);
		assertEquals("Girafa", p1.getNome());
		p1.setNome("Passarinho");
		assertEquals("Passarinho", p1.getNome());
		assertEquals(Sexo.SELECIONAR, p2.getSexo());
		assertFalse(p1.getSobrenome().equals(p2.getSobrenome()));
	}
	
	 /**
	 * Testa toString de pessoa
	 * @throws Exception Lancada quando algum parametro for invalido.
	 */
	@Test
	public void testaToString() throws Exception {
		Pessoa p1 = new Pessoa("Girafa", "Melman", Sexo.FEMININO);
		assertEquals("Nome: Girafa Melman. Idade: 0. Sexo: Feminino.", p1
				.toString());
	}
}